package model.board;

import java.io.File;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import model.board.paging.Board_ListVO;
import model.board.paging.CommonConstants;
import model.board.paging.ListVO;
import model.board.paging.PagingBean;
public class QnaBoardService {
	public QnaBoardDao qnaBoardDao;

	public QnaBoardService() {
		super();
	}

	public QnaBoardService(QnaBoardDao qnaBoardDao) {
		super();
		this.qnaBoardDao = qnaBoardDao;
	}
	
	//qna게시판의 글을 등록,
	public void writeQna(QnaBoardVO bvo) throws SQLException{
		int no=qnaBoardDao.writeqna(bvo); //bvo 객체저장? 시퀀스(프라이머리키)를 받아와서 그 글의 날짜를 추가해준다.
		System.out.println("service writeqna no:"+no);
		String date=qnaBoardDao.selectByNoForDate(no);  //date에는 날짜가 들어가있네
		System.out.println("service writeqna data:"+date);
		bvo.setB_date(date);
	} 
	//전체 보기시 페이징 처리
	public HashMap selectAllQna(String pageNo) throws SQLException{
		QnaBoardVO vo=null;
		int num=0;
		if(pageNo==null||pageNo=="") 
			pageNo="1";
		int numberPerPage=CommonConstants.QNA_CONTENT_NUMBER_PER_PAGE;
		HashMap map=new HashMap();
		map.put("pageNo", pageNo);
		map.put("numberPerPage", numberPerPage);
		List<QnaBoardVO> list=qnaBoardDao.getContentList(map);
		ArrayList noList=new ArrayList();
		for(int i=0;i<list.size();i++){
			num=list.get(i).getB_no();
		}
		int total=qnaBoardDao.totalContent();
		PagingBean pagingBean=new PagingBean(total,Integer.parseInt(pageNo));
		ListVO lvo=new ListVO(list,pagingBean);
		//오늘날짜를 받아올수 있는 객체
		Date date = new Date();
		//날짜를 원하는 포멧으로 받을 수 있는 객체 DB에 yyyy.mm.dd로 저장되어 있으므로 아래와 같이 포멧을 맞춤
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		//맵 객체를 생성하여 map.put을 이용 오늘날짜를 담음
		map.put("today", df.format(date));
		//map.put을 이용 LisvVO를 담음
		map.put("lvo", lvo);
		return map;
	}
	
	 //상세보기시 count update
	public QnaBoardVO showContent(int bno) throws SQLException{
		qnaBoardDao.updateCount(bno);
		return qnaBoardDao.showContent(bno);
	}
	//cnt 안올리고 게시글 가져오기 
	public QnaBoardVO showContentNoCnt(int bno) throws SQLException{
		return qnaBoardDao.showContent(bno);
	}
	//시퀀스로 게시글 삭제
	public void deleteContent(int bno) throws SQLException{
		qnaBoardDao.deleteContent(bno);
	}
	//bvo로 게시글 수정(update)
	public void updateContent(QnaBoardVO bvo) throws SQLException {
		qnaBoardDao.updateContent(bvo);
	}
	//qna게시판 검색시
	public Board_ListVO searchQna(HashMap map)  throws SQLException {
		String pageNo=(String)map.get("pageNo");
		QnaBoardVO vo=(QnaBoardVO)map.get("bvo");
		System.out.println("service searchQna vo:"+vo);
		if(pageNo==null||pageNo=="")
			pageNo="1";
		int numberPerPage=CommonConstants.QNA_CONTENT_NUMBER_PER_PAGE;
		map.put("pageNo", pageNo);
		map.put("numberPerPage", numberPerPage);
		map.put("b_title", vo.getB_title());
		map.put("b_writer", vo.getB_writer());
		System.out.println("service searchQna map:"+map);
		List list=qnaBoardDao.searchQna(map);
		System.out.println("service searchQna list:"+list);
		int total=qnaBoardDao.totalContentBySearch(vo);
		PagingBean paging=new PagingBean(total,Integer.parseInt(pageNo));
		Board_ListVO lvo=new Board_ListVO(list,paging,map);
		System.out.println("service searchQna lvo:"+lvo);
		return lvo;
	}
	//답글작성시 restep과 relevel을 올려준다
	public int qnaReplyWrite(QnaBoardVO vo) throws SQLException {
		int ref=vo.getB_ref();
		int restep=vo.getB_restep();
		int relevel=vo.getB_relevel();
		qnaBoardDao.updateRestep(ref,restep);
		vo.setB_restep(restep+1);
		vo.setB_relevel(relevel+1);
		int num=qnaBoardDao.insertRefContent(vo); 
		return num;
	}
	//수정할때 파일 삭제시 사용
	public void deleteFile(String newfilename) {
		File f=new File(newfilename);
		System.out.println(newfilename+" file remove:"+f.delete());
	}
	//답글 작성시 저장시키는 메서드
	public void insertReply(BoardReplyVO brvo) throws SQLException{
		int no=qnaBoardDao.insertReply(brvo);
		System.out.println("service insertReply no:"+no);
		String date=qnaBoardDao.selectByNoForDate(no);  
		qnaBoardDao.updateReplyCount(brvo.getB_no());
		brvo.setBoard_date(date);
	}
	//전체리플을 보여주는 메서드
	public List selectAllReply(int no) throws SQLException{
		System.out.println("service selectAllReply NO::!!!!!!!!!!!!!"+no);
		return qnaBoardDao.selectAllReply(no);
	}
	//리플 삭제시 사용하는 메서드
	public void delReply(HashMap bmap) throws SQLException {
		qnaBoardDao.delReply((String) bmap.get("board_no"));
		qnaBoardDao.deleteReplyCount((Integer)bmap.get("bno"));
	}
	//관리자가 글 삭제시 그 안의 리플까지 같이 삭제한다.
	public void deleteRe(int bno) throws SQLException{
		qnaBoardDao.deleteRef(bno);
	}
}





